package br.com.autoleal.ocorrencia;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.autoleal.veiculo.entity.Veiculo;

@Entity
@NamedQueries({
	@NamedQuery(name = "Ocorrencia.buscarCodigoMax", query = "SELECT max(o.codigo) FROM Ocorrencia o"),
	@NamedQuery(name = "Ocorrencia.buscarOcorrenciaNaoFechadas", query = "SELECT o FROM Ocorrencia o JOIN FETCH o.veiculo WHERE o.dtSaida IS NULL"),
	@NamedQuery(name = "Ocorrencia.buscarOcorrenciasPorPlaca", query = "SELECT o FROM Ocorrencia o  WHERE upper(o.veiculo.placa) =:placa")
})
public class Ocorrencia implements Serializable {

	private static final long serialVersionUID = -1335401034068261585L;

	@Id
	@GeneratedValue
	private Long id;
	
	@Column(name = "codigo", nullable = false)
	private String codigo;
	
	@Column(name = "titulo", nullable = false)
	private String titulo;
	
	@Column(name = "descricao", length = 1024, nullable = false)
	private String descricao;
	
	@Column(name = "dt_entrada", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dtEntrada;
	
	@Column(name = "dt_saida", nullable = true)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dtSaida;
	
	@Column(name = "prioridade", nullable = false)
	private Integer prioridade;
	
	@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, targetEntity = Veiculo.class)
	private Veiculo veiculo;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getDtEntrada() {
		return dtEntrada;
	}

	public void setDtEntrada(Date dtEntrada) {
		this.dtEntrada = dtEntrada;
	}

	public Date getDtSaida() {
		return dtSaida;
	}

	public void setDtSaida(Date dtSaida) {
		this.dtSaida = dtSaida;
	}

	public Integer getPrioridade() {
		return prioridade;
	}

	public void setPrioridade(Integer prioridade) {
		this.prioridade = prioridade;
	}

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	
}
